--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
LXMF/LXMPeer.py 0.2.3 (fc4e30d4) Text, 10.41 KB
Tff7b72import T7ee787os
Tff7b72import T7ee787time
Tff7b72import T7ee787RNS
Tff7b72import T7ee787RNST7ee787.T7ee787vendorT7ee787.T7ee787umsgpack Tff7b72as T7ee787msgpack
Tff7b72from T7ee787.T7ee787LXMF Tff7b72import Te6edf3APP_NAME
Tff7b72class T56d364LXMPeerTb4b4b4:
Te6edf3OFFER_REQUEST_PATH Tff7b72= Ta5d6ff"Ta5d6ff/offerTa5d6ff"
Te6edf3MESSAGE_GET_PATH Tff7b72= Ta5d6ff"Ta5d6ff/getTa5d6ff"
Te6edf3IDLE Tff7b72= T79c0ff0x00
Te6edf3LINK_ESTABLISHING Tff7b72= T79c0ff0x01
Te6edf3LINK_READY Tff7b72= T79c0ff0x02
Te6edf3REQUEST_SENT Tff7b72= T79c0ff0x03
Te6edf3RESPONSE_RECEIVED Tff7b72= T79c0ff0x04
Te6edf3RESOURCE_TRANSFERRING Tff7b72= T79c0ff0x05
Te6edf3ERROR_NO_IDENTITY Tff7b72= T79c0ff0xf0
Te6edf3ERROR_NO_ACCESS Tff7b72= T79c0ff0xf1
T8b949e# Maximum amount of time a peer can
T8b949e# be unreachable before it is removed
Te6edf3MAX_UNREACHABLE Tff7b72= T79c0ff4Tff7b72*T79c0ff24Tff7b72*T79c0ff60Tff7b72*T79c0ff60
Tf0883e@staticmethod
Tff7b72def Td2a8fffrom_bytesTb4b4b4(Te6edf3peer_bytesTb4b4b4, Te6edf3routerTb4b4b4)Tb4b4b4:
Te6edf3dictionary Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffunpackbTb4b4b4(Te6edf3peer_bytesTb4b4b4)
Te6edf3peer Tff7b72= Te6edf3LXMPeerTb4b4b4(Te6edf3routerTb4b4b4, Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4]Tb4b4b4)
Te6edf3peerTff7b72.Td2a8ffpeering_timebase Tff7b72= Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6ffpeering_timebaseTa5d6ff"Tb4b4b4]
Te6edf3peerTff7b72.Td2a8ffalive Tff7b72= Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6ffaliveTa5d6ff"Tb4b4b4]
Te6edf3peerTff7b72.Td2a8fflast_heard Tff7b72= Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6fflast_heardTa5d6ff"Tb4b4b4]
Tff7b72for Te6edf3transient_id Tff7b72in Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6ffhandled_idsTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3transient_id Tff7b72in Te6edf3routerTff7b72.Td2a8ffpropagation_entriesTb4b4b4:
Te6edf3peerTff7b72.Td2a8ffhandled_messagesTb4b4b4[Te6edf3transient_idTb4b4b4] Tff7b72= Te6edf3routerTff7b72.Td2a8ffpropagation_entriesTb4b4b4[Te6edf3transient_idTb4b4b4]
Tff7b72for Te6edf3transient_id Tff7b72in Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6ffunhandled_idsTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72if Te6edf3transient_id Tff7b72in Te6edf3routerTff7b72.Td2a8ffpropagation_entriesTb4b4b4:
Te6edf3peerTff7b72.Td2a8ffunhandled_messagesTb4b4b4[Te6edf3transient_idTb4b4b4] Tff7b72= Te6edf3routerTff7b72.Td2a8ffpropagation_entriesTb4b4b4[Te6edf3transient_idTb4b4b4]
Tff7b72return Te6edf3peer
Tff7b72def Td2a8ffto_bytesTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3dictionary Tff7b72= Tb4b4b4{Tb4b4b4}
Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6ffpeering_timebaseTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffpeering_timebase
Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6ffaliveTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffalive
Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6fflast_heardTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8fflast_heard
Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6ffdestination_hashTa5d6ff"Tb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffdestination_hash
Te6edf3handled_ids Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3transient_id Tff7b72in Tff7b72selfTff7b72.Td2a8ffhandled_messagesTb4b4b4:
Te6edf3handled_idsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3transient_idTb4b4b4)
Te6edf3unhandled_ids Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3transient_id Tff7b72in Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTb4b4b4:
Te6edf3unhandled_idsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3transient_idTb4b4b4)
Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6ffhandled_idsTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3handled_ids
Te6edf3dictionaryTb4b4b4[Ta5d6ff"Ta5d6ffunhandled_idsTa5d6ff"Tb4b4b4] Tff7b72= Te6edf3unhandled_ids
Tff7b72return Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Te6edf3dictionaryTb4b4b4)
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3routerTb4b4b4, Te6edf3destination_hashTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffalive Tff7b72= Tff7b72False
Tff7b72selfTff7b72.Td2a8fflast_heard Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8ffpeering_timebase Tff7b72= T79c0ff0
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffIDLE
Tff7b72selfTff7b72.Td2a8ffunhandled_messages Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffhandled_messages Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72selfTff7b72.Td2a8ffrouter Tff7b72= Te6edf3router
Tff7b72selfTff7b72.Td2a8ffdestination_hash Tff7b72= Te6edf3destination_hash
Tff7b72selfTff7b72.Td2a8ffidentity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdestination Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Te6edf3APP_NAMETb4b4b4, Ta5d6ff"Ta5d6ffpropagationTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffsyncTb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffInitiating LXMF Propagation Node sync with peer Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72not Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffhas_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffNo path to peer Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff exists, requesting...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3RNSTff7b72.Td2a8ffTransportTff7b72.Td2a8ffrequest_pathTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPath requested, retrying sync laterTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffidentity Tff7b72== Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidentity Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTff7b72.Td2a8ffrecallTb4b4b4(Te6edf3destination_hashTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffdestination Tff7b72= Te6edf3RNSTff7b72.Td2a8ffDestinationTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidentityTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffOUTTb4b4b4, Te6edf3RNSTff7b72.Td2a8ffDestinationTff7b72.Td2a8ffSINGLETb4b4b4, Te6edf3APP_NAMETb4b4b4, Ta5d6ff"Ta5d6ffpropagationTa5d6ff"Tb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8ffidentity Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657lenTb4b4b4(Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMPeerTff7b72.Td2a8ffIDLETb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffEstablishing link for sync to peer Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Te6edf3RNSTff7b72.Td2a8ffLinkTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestinationTb4b4b4, Te6edf3established_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_establishedTb4b4b4, Te6edf3closed_callback Tff7b72= Tff7b72selfTff7b72.Td2a8fflink_closedTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffLINK_ESTABLISHING
Tff7b72elseTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffstate Tff7b72== Te6edf3LXMPeerTff7b72.Td2a8ffLINK_READYTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffalive Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8fflast_heard Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSynchronisation link to peer Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff established, preparing request...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3unhandled_ids Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3purged_ids Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3transient_id Tff7b72in Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTb4b4b4:
Tff7b72if Te6edf3transient_id Tff7b72in Tff7b72selfTff7b72.Td2a8ffrouterTff7b72.Td2a8ffpropagation_entriesTb4b4b4:
Te6edf3unhandled_idsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3transient_idTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3purged_idsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3transient_idTb4b4b4)
Tff7b72for Te6edf3transient_id Tff7b72in Te6edf3purged_idsTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffDropping unhandled message Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3transient_idTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff for peer Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff since it no longer exists in the message store.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTff7b72.Td2a8ffpopTb4b4b4(Te6edf3transient_idTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSending sync request to peer Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestinationTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffrequestTb4b4b4(Te6edf3LXMPeerTff7b72.Td2a8ffOFFER_REQUEST_PATHTb4b4b4, Te6edf3unhandled_idsTb4b4b4, Te6edf3response_callbackTff7b72=Tff7b72selfTff7b72.Td2a8ffoffer_responseTb4b4b4, Te6edf3failed_callbackTff7b72=Tff7b72selfTff7b72.Td2a8ffrequest_failedTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffREQUEST_SENT
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffCould not request sync to peer Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff since its identity could not be recalled.Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72def Td2a8ffrequest_failedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSync request to peer Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestinationTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff failedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffIDLE
Tff7b72def Td2a8ffoffer_responseTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3request_receiptTb4b4b4)Tb4b4b4:
Tff7b72tryTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffRESPONSE_RECEIVED
Te6edf3response Tff7b72= Te6edf3request_receiptTff7b72.Td2a8ffresponse
Te6edf3wanted_messages Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3wanted_message_ids Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Te6edf3response Tff7b72== Te6edf3LXMPeerTff7b72.Td2a8ffERROR_NO_IDENTITYTb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffRemote peer indicated that no identification was received, retrying...Ta5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffindentifyTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffLINK_READY
Tff7b72selfTff7b72.Td2a8ffsyncTb4b4b4(Tb4b4b4)
Tff7b72elif Te6edf3response Tff7b72== Tff7b72FalseTb4b4b4:
T8b949e# Peer already has all advertised messages
Tff7b72for Te6edf3transient_id Tff7b72in Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTb4b4b4:
Te6edf3message_entry Tff7b72= Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTb4b4b4[Te6edf3transient_idTb4b4b4]
Tff7b72selfTff7b72.Td2a8ffhandled_messagesTb4b4b4[Te6edf3transient_idTb4b4b4] Tff7b72= Te6edf3message_entry
Tff7b72selfTff7b72.Td2a8ffunhandled_messages Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72elif Te6edf3response Tff7b72== Tff7b72TrueTb4b4b4:
T8b949e# Peer wants all advertised messages
Tff7b72for Te6edf3transient_id Tff7b72in Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTb4b4b4:
Te6edf3wanted_messagesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTb4b4b4[Te6edf3transient_idTb4b4b4]Tb4b4b4)
Te6edf3wanted_message_idsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3transient_idTb4b4b4)
Tff7b72elseTb4b4b4:
T8b949e# Peer wants some advertised messages
Te6edf3peer_had_messages Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3transient_id Tff7b72in Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTff7b72.Td2a8ffcopyTb4b4b4(Tb4b4b4)Tb4b4b4:
T8b949e# If the peer did not want the message, it has
T8b949e# already received it from another peer.
Tff7b72if Tff7b72not Te6edf3transient_id Tff7b72in Te6edf3responseTb4b4b4:
Te6edf3message_entry Tff7b72= Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTff7b72.Td2a8ffpopTb4b4b4(Te6edf3transient_idTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhandled_messagesTb4b4b4[Te6edf3transient_idTb4b4b4] Tff7b72= Te6edf3message_entry
Tff7b72for Te6edf3transient_id Tff7b72in Te6edf3responseTb4b4b4:
Te6edf3wanted_messagesTff7b72.Td2a8ffappendTb4b4b4(Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTb4b4b4[Te6edf3transient_idTb4b4b4]Tb4b4b4)
Te6edf3wanted_message_idsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3transient_idTb4b4b4)
Tff7b72if Tffa657lenTb4b4b4(Te6edf3wanted_messagesTb4b4b4) Tff7b72> T79c0ff0Tb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffPeer wanted Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tffa657lenTb4b4b4(Te6edf3wanted_messagesTb4b4b4)Tb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff of the available messagesTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Te6edf3lxm_list Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3message_entry Tff7b72in Te6edf3wanted_messagesTb4b4b4:
Te6edf3file_path Tff7b72= Te6edf3message_entryTb4b4b4[T79c0ff1Tb4b4b4]
Tff7b72if Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3file_pathTb4b4b4)Tb4b4b4:
Te6edf3file Tff7b72= Tffa657openTb4b4b4(Te6edf3file_pathTb4b4b4, Ta5d6ff"Ta5d6ffrbTa5d6ff"Tb4b4b4)
Te6edf3lxmf_data Tff7b72= Te6edf3fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)
Te6edf3fileTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Te6edf3lxm_listTff7b72.Td2a8ffappendTb4b4b4(Te6edf3lxmf_dataTb4b4b4)
Te6edf3data Tff7b72= Te6edf3msgpackTff7b72.Td2a8ffpackbTb4b4b4(Tb4b4b4[Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3lxm_listTb4b4b4]Tb4b4b4)
Te6edf3resource Tff7b72= Te6edf3RNSTff7b72.Td2a8ffResourceTb4b4b4(Te6edf3dataTb4b4b4, Tff7b72selfTff7b72.Td2a8fflinkTb4b4b4, Te6edf3callback Tff7b72= Tff7b72selfTff7b72.Td2a8ffresource_concludedTb4b4b4)
Te6edf3resourceTff7b72.Td2a8fftransferred_messages Tff7b72= Te6edf3wanted_message_ids
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffRESOURCE_TRANSFERRING
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffIDLE
Tff7b72except Tf85149Exception Tff7b72as Te6edf3eTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffError while handling offer response from peer Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestinationTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe contained exception was: Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Te6edf3eTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_ERRORTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffIDLE
Tff7b72def Td2a8ffresource_concludedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3resourceTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3resourceTff7b72.Td2a8ffstatus Tff7b72== Te6edf3RNSTff7b72.Td2a8ffResourceTff7b72.Td2a8ffCOMPLETETb4b4b4:
Tff7b72for Te6edf3transient_id Tff7b72in Te6edf3resourceTff7b72.Td2a8fftransferred_messagesTb4b4b4:
Te6edf3message Tff7b72= Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTff7b72.Td2a8ffpopTb4b4b4(Te6edf3transient_idTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffhandled_messagesTb4b4b4[Te6edf3transient_idTb4b4b4] Tff7b72= Te6edf3message
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffIDLE
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffSync to peer Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff completedTa5d6ff"Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffalive Tff7b72= Tff7b72True
Tff7b72selfTff7b72.Td2a8fflast_heard Tff7b72= Te6edf3timeTff7b72.Td2a8fftimeTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffResource transfer for LXMF peer sync failed to Ta5d6ff"Tff7b72+Tffa657strTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestinationTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_DEBUGTb4b4b4)
Tff7b72if Tff7b72selfTff7b72.Td2a8fflink Tff7b72!= Tff7b72NoneTb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffteardownTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffIDLE
Tff7b72def Td2a8fflink_establishedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3linkTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflinkTff7b72.Td2a8ffidentifyTb4b4b4(Tff7b72selfTff7b72.Td2a8ffrouterTff7b72.Td2a8ffidentityTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffLINK_READY
Tff7b72selfTff7b72.Td2a8ffsyncTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fflink_closedTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3linkTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8fflink Tff7b72= Tff7b72None
Tff7b72selfTff7b72.Td2a8ffstate Tff7b72= Te6edf3LXMPeerTff7b72.Td2a8ffIDLE
Tff7b72def Td2a8ffhandle_messageTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3transient_idTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3transient_id Tff7b72in Tff7b72selfTff7b72.Td2a8ffhandled_messages Tff7b72and Tff7b72not Te6edf3transient_id Tff7b72in Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTb4b4b4:
T8b949e# TODO: Remove at some point
Te6edf3RNSTff7b72.Td2a8fflogTb4b4b4(Ta5d6ff"Ta5d6ffThe message Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Te6edf3transient_idTb4b4b4)Tff7b72+Ta5d6ff"Ta5d6ff was added to distribution queue for Ta5d6ff"Tff7b72+Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)Tb4b4b4, Te6edf3RNSTff7b72.Td2a8ffLOG_EXTREMETb4b4b4)
Tff7b72selfTff7b72.Td2a8ffunhandled_messagesTb4b4b4[Te6edf3transient_idTb4b4b4] Tff7b72= Tff7b72selfTff7b72.Td2a8ffrouterTff7b72.Td2a8ffpropagation_entriesTb4b4b4[Te6edf3transient_idTb4b4b4]
Tff7b72def Tff7b72__str__Tb4b4b4(Tff7b72selfTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4:
Tff7b72return Te6edf3RNSTff7b72.Td2a8ffprettyhexrepTb4b4b4(Tff7b72selfTff7b72.Td2a8ffdestination_hashTb4b4b4)
Tff7b72elseTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff<Unknown>Ta5d6ff"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────